Design Twice
「二度設計せよ」
最近めちゃくちゃ意識できている radish-miyazaki.icon
ソフトウェア設計は難しい
最初に考えついた設計が、最も良い選択であることは少ない
頭の良し悪しは関係ない
経験則
根のある知識 <-> 根草なしの知識
「賢い人は、最初から正確に設計できる」というのは誤り
複数の選択肢を検討することで、より良い結果を得ることができる
とりあえず、二度設計せよ(Design Twice)
「合理的なアプローチはこれしかない!」と自信があっても考える
良くない設計になることが分かり切っている場合でも考える
2つの設計のメリデメをリストアップする
このとき重視するのが、上位レイヤでの使いやすさ
他に考慮すべきこと
A は B よりもシンプルなインタフェースを持っているか?(簡潔さ)
A のインタフェースは B のものよりも汎用的か?(汎用性)
A のインタフェースは B のものよりも、より効率的に問題を解決するか?(効率性)
問題を解決するのに、たくさんのメソッドを呼び出す場合は効率的とは言えない
比較することで、より良い設計を見極めることができるようになる
最初の案か、代替案か、はたまた複数の案を組み合わせたものか
設計スキルの向上
どの選択肢も魅力的でないケースもある
追加案を考える
元々の選択肢で顕在化した問題点を起点に考えてみる
Design Twice は、システムのどのレベルでも適用できる
モジュール設計時
Modules Should Be Deep
どのインタフェースが適切か?
どの実装が適切か?
実装の目標は、インタフェースの目標とは異なる
実装にとって重要なのは、シンプルさとパフォーマンス
モジュールにとって重要なのは、シンプルな実装よりもシンプルなインタフェース という前提あり radish-miyazaki.icon
UI の機能
モジュール分解
etc ...
二度設計することは、多くの時間を必要としない
(相対的には)radish-miyazaki.icon
クラスなどの小さなモジュールの場合
1つの代替案を考えるのに、多くて 1〜2時間程度
実装に 数日 または数週間 かかることを考えると小さい
大きなモジュールの場合であっても、実装時間 >>> 二度設計する時間
二度設計することによる、費用対効果で十分にペイできる
#読書メモ #A_Philosophy_Of_Software_Design